package com.yupfeg.livedata

import androidx.annotation.MainThread

/**
 * 可读写的单次执行事件的LiveData
 * * 相比开放`setValue`和`postValue`操作，通常在`ViewModel`或`UseCase`领域层使用
 * @author yuPFeG
 * @date 2021/09/16
 */

@Suppress("unused")
class MutableEventLiveData<T> : EventLiveData<T>(){

    /**
     * 设置LiveData数据
     * @param value 仅允许非空对象赋值
     */
    @MainThread
    public override fun setValue(value: T?) {
        super.setValue(value)
    }

    /**
     * 允许在非主线程赋值LiveData内容
     * * 但存在偶发的丢失数据问题，尽可能不使用
     * @param value 仅允许非空对象赋值
     * */
    public override fun postValue(value: T?) {
        super.postValue(value)
    }

    /**
     * 手动回收当前事件内容
     * */
    @MainThread
    fun releaseEvent() {
        this.value = null
    }

}